"""
This is the reference documentation for
U{Kineta<http://kineta.googlecode.com/>}, a non-SQL relational database.

You may also be interested in the
U{Getting Started Guide<http://code.google.com/p/kineta/wiki/GettingStarted>}.

General Information
===================

 - All classes, regardless of which module they are defined in, can be imported
 directly from the C{kineta} package, i.e.  C{kineta.FileDB}, C{kineta.Server},
 etc.

 - Table and column names in Kineta can be any arbitrary string.  When
 specifying a table or column, any value other than C{None} can be passed
 (although lists have special meaning to the L{select<FileDB.select>} method),
 but Kineta always stores the name internally as Unicode by calling the
 built-in C{unicode()} function on the passed-in value. Thus you can also use
 classes or other objects as table or column names, provided they define a
 C{__unicode__} or C{__str__} method.

 - Where a "list" is specified as a parameter type, a tuple can be substituted
 instead.

 - It has come to my attention that many Python users are unfamiliar with the
 relatively new feature called "the 'with' statement'", as described
 U{here<http://www.python.org/dev/peps/pep-0343/>}.  The 'with' statement is
 an extremely useful construct which Kineta has been built from the ground-up
 to take advantage of, and which I reference several times in this
 documentation to encourage its use, so familiarizing yourself with it ahead of
 time may make things easier to understand.
"""

from kineta.filedb import FileDB, Rollback, KinetaError
from kineta.server import Server
from kineta.remotedb import RemoteDB

__all__ = ["FileDB", "Rollback", "KinetaError", "Server", "RemoteDB"]

# TODO switch to simplejson
# TODO freezing for tables and databases
# TODO loop join
# TODO aggregates
